home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 6
/
Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso
/
038a
/
bas_int1.zip
/
PROGINFO.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-06-04
|
3KB
|
96 lines
'==================================================================
'Quick Basic Forum
' Date : 24-May-91
' From : Dick Dennison
'Subject : PROGRAMINFO.BAS, QuickBasic SUBroutine
'For the use of all QB users everywhere. Keith Rolland
'1:321/109.2@FidoNet
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' declare sub ProgramInfo (ProgramName$, CommandTail$, DosVerHi%,_
' DosVerLo%, CurrentDir$, Path$, Environment$)
'
' This sub _returns_ the following info:
' ProgramName$ = the full name of the currently running program
' CommandTail$ = anything else that was on the command line, case
' preserved
' Environment$ = the full text of the environment, each separated by
' chr$(255)
' CurrentDir$ = the current directory, which may be different than Path$
' Path$ = the full path where the program is, as in "C:\BASIC\PROGS"
' DosVerHi% = the major number of DOS, as in "3"
' DosVerLo% = the minor number of DOS, as in "21" (for DOS 3.21)
' This routine should be used before any disk activity is performed,
' because the default 128-byte DTA (disk transfer area) is the
' CommandTail$ area.
'========================================================================
'$include: '\qb\lib\qb.bi' 'Note that you must use /L command line
'option to get QB.QLB QuickLibrary w/
'Call Interruptx
sub ProgramInfo (ProgramName$, CommandTail$, DosVerHi%,_
DosVerLo%, CurrentDir$, Path$, Environment$)
Environment$ = "" : ProgramName$ = "" : Path$ = "" : CommandTail$ = ""
dim reg as RegTypeX
reg.ax = &H3000
interruptx &H21, reg, reg
DosVerLo% = (reg.ax \ 256)
DosVerHi% = (reg.ax mod 256)
reg.ax = &H1900
interruptx &H21, reg, reg
Drive$ = chr$((reg.ax and &Hff) + 65) + ":\"
reg.dx = 0
reg.ax = &H4700
tmp$ = space$(64)
reg.ds = varseg(tmp$)
reg.si = sadd(tmp$)
interruptx &H21, reg, reg
CurrentDir$ = Drive$ + left$(tmp$, instr(tmp$, chr$(0)) - 1)
reg.ax = 25088
interruptx &H21, reg, reg
def seg = reg.bx
EnvLo% = peek(&H2c)
EnvHi% = peek(&H2d)
CmdTailLen% = peek(&H80)
for tmp% = &H81 to ((&H81 + CmdTailLen%) - 1)
CommandTail$ = CommandTail$ + chr$(peek(tmp%))
next tmp%
def seg = EnvLo% + (EnvHi% * 256)
Pointer% = 0
do until peek(Pointer%) = 0
do until peek(Pointer%) = 0
Environment$ = Environment$ + chr$(peek(Pointer%))
Pointer% = Pointer% + 1
loop
Environment$ = Environment$ + chr$(255)
Pointer% = Pointer% + 1
loop
Pointer% = Pointer% + 3
do until peek(Pointer%) = 0
ProgramName$ = ProgramName$ + chr$(peek(Pointer%))
Pointer% = Pointer% + 1
loop
PathLen% = len(ProgramName$)
for Pointer% = PathLen% to 1 step -1
tmp$ = mid$(ProgramName$, Pointer%, 1)
if tmp$ = "\" then
Path$ = left$(ProgramName$, (PathLen% - Pointer% - 2))
ProgramName$ = mid$(ProgramName$, Pointer% + 1)
exit for
end if
next Pointer%
def seg
end sub